﻿שימוש בהרחבות
================

שימוש בהרחבה בדרך כלל כולל את שלושת השלבים הבאים:

1. הורדת ההרחבה [מספרית ההרחבות](http://www.yiiframework.com/extensions/) של Yii.
2. חילוץ קבצי ההרחבה תחת התיקיה `extensions/xyz` הנמצאת בתיקיה [ראשית](/doc/guide/basics.application#application-base-directory) של האפליקציה, כש `xyz`הינו שם ההרחבה.
3. ייבוא, הגדרה ושימוש בהרחבה.

לכל הרחבה יש שם המייחד אותה משאר ההרחבות. בהתחשב שיש לנו הרחבה בשם `xyz`, אנו תמיד יכולים להשתמש בנתיב המקוצר `ext.xyz` בכדי לאתר את התיקיה הראשית שלה המכילה את כל הקבצים של `xyz`.

» Note|הערה: הנתיב המקוצר `ext` קיים מגרסא 1.0.8. קודם לכן, היה צורך להשתמש ב `application.extensions` בכדי להתייחס לתיקיה המכילה את כל ההרחבות. בתיאור הבא, אנו מניחים ש `ext` מוגדר. יהיה צורך בלהחליף אותו עם `application.extensions` במידה והינך משתמש בגרסא 1.0.7 ומטה.

הרחבות שונות כוללות דרישות שונות בנוגע לייבוא שלהם, הגדרות ושימוש. בחלק הבא, אנו מסכמים מקרים נפוצים של שימוש בהרחבות, לפי הקטגוריות שלהם המתוארות [סקירה](/doc/guide/extension.overview).


הרחבות Zii
--------------

לפני שנתחיל להסביר בנוגע לשימוש הרחבות צד-שלישי, אנו נרצה קודם להציג את ספרית ה Zii, שמפותחת על ידי צוות הפיתוח של Yii וכלולה בכל הגרסאות של Yii החל מגרסא 1.1.0. ספרית ה Zii מאוחסנת כפרוייקט גוגל בשם [zii](http://code.google.com/p/zii/).

בעת שימוש בהרחבה מספרית Zii, יש צורך להתייחס למחקה על ידי שימוש בנתיב מקוצר בפורמטר של `zii.path.to.ClassName`. במקרה הזה, הנתיב הראשי `zii` כבר הוגדר מראש על ידי Yii. נתיב זה מתייחס לתיקיה הראשית של ספריית ה Zii. לדוגמא, כדי להשתמש ב [CGridView], אנו נשתמש בקוד הבא בתוך קובץ תצוגה כשאנו מתייחסים להרחבה:

~~~
[php]
$this-»widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=»$dataProvider,
));
~~~


רכיב באפליקציה
---------------------

בכדי להשתמש [ברכיב אפליקציה](/doc/guide/basics.application#application-component), אנו קודם צריכים לשנות את [הגדרות האפליקציה](/doc/guide/basics.application#application-configuration) על ידי הוספת רשומה (אלמנט) חדשה למאפיין של `components`, כפי שמוצג בדוגמא הבאה:

~~~
[php]
return array(
    // 'preload'=»array('xyz',...),
    'components'=»array(
        'xyz'=»array(
            'class'=»'ext.xyz.XyzClass',
            'property1'=»'value1',
            'property2'=»'value2',
        ),
        // הגדרות רכיבים נוספים
    ),
);
~~~

לאחר מכן, אנו יכולים לגשת לרכיב בכל מקום על ידי `Yii::app()-»xyz`. הרכיב יווצר בצורה עצלה (זאת אומרת יווצר כשהוא נקרא בפעם הראשונה), אלה אם כן אנו נרשום את שמו במאפיין של `preload` בהגדרות האפליקציה.

התנהלות/התנהגות
--------

[התנהלות/התנהגות](/doc/guide/basics.component#component-behavior) ניתנת לשימוש בכל מיני רכיבים. השימוש בהם כרוך בשני שלבים. בשלב הראשון, ההתנהלות מצורפת לרכיב כלשהו. בשלב השני, מתודת התנהלות נקראת על ידי הרכיב אליו היא צורפה. לדוגמא:

~~~
[php]
// הפרמטר הראשון הוא יחודי ומשמש לצורך זיהוי ההתנהלות
$component-»attachBehavior($name,$behavior);
// המתודה test נמצאת במחלקה של $behavior
$component-»test();
~~~

בדרך כלל, התנהלות מצורפת לרכיב דרך הגדרות ולא על ידי קריאה למתודה `attachBehavior`. לדוגמא, בכדי לצרף התנהלות [רכיב](/doc/guide/basics.application#application-component) באפליקציה, אנו נשתמש [בהגדרות](/doc/guide/basics.application#application-configuration) האפליקציה הבאות:

~~~
[php]
return array(
    'components'=»array(
        'db'=»array(
            'class'=»'CDbConnection',
            'behaviors'=»array(
                'xyz'=»array(
                    'class'=»'ext.xyz.XyzBehavior',
                    'property1'=»'value1',
                    'property2'=»'value2',
                ),
            ),
        ),
        //....
    ),
);
~~~

הקוד למעלה, מצרף את ההתנהלות `xyz` לרכיב האפליקציה `db`. אנו עושים זאת מאחר והמחלקה [CApplicationComponent] מגדירה מאפיין בשם `behaviors`. על ידי הגדרת מאפיין זה עם רשימה של הגדרות התנהלות, הרכיב יצרף את ההתנהלויות הללו בזמן האתחול שלו.

עבור המחלקות [CController], [CFormModel] ו [CActiveRecord] שבדרך כלל דורשות הרחבה, צירוף התנהלויות נעשית על ידי דריסה של המתודה `()behaviors`. המחלקה תצרף אוטומטית את ההתנהלויות המוגדרות במתודה זו בזמן אתחול. לדוגמא,

~~~
[php]
public function behaviors()
{
    return array(
        'xyz'=»array(
            'class'=»'ext.xyz.XyzBehavior',
            'property1'=»'value1',
            'property2'=»'value2',
        ),
    );
}
~~~


וידג'ט
------

שימוש [בוידג'טים](/doc/guide/basics.view#widget) בדרך כלל נעשה בקבצי [תצוגה](/doc/guide/basics.view). נניח ומחלקת הוידג'ט `XyzClass` שייכת להרחבה `xyz`, אנו יכולים להשתמש בו בתוך קובץ תצוגה בצורה הבאה,

~~~
[php]
// וידג'ט שאינו דורש תוכן
«?php $this-»widget('ext.xyz.XyzClass', array(
    'property1'=»'value1',
    'property2'=»'value2')); ?»

// וידג'ט שדורש תוכן
«?php $this-»beginWidget('ext.xyz.XyzClass', array(
    'property1'=»'value1',
    'property2'=»'value2')); ?»

...תוכן הוידג'ט....

«?php $this-»endWidget(); ?»
~~~

פעולה
------

שימוש [בפעולות](/doc/guide/basics.controller#action) נעשה על ידי [הקונטרולרים](/doc/guide/basics.controller) בכדי לענות על בקשות משתמש ספציפיות. נניח ומחלקת הפעולה `XyzClass` השייכת להרחבה בשם `xyz`, אנו יכולים להשתמש בה על ידי דריסה של המתודה [CController::actions] במחלקה של הקונטרולר:

~~~
[php]
class TestController extends CController
{
    public function actions()
    {
        return array(
            'xyz'=»array(
                'class'=»'ext.xyz.XyzClass',
                'property1'=»'value1',
                'property2'=»'value2',
            ),
            // פעולות נוספות
        );
    }
}
~~~

לאחר מכן, ניתן לגשת לפעולה על ידי [הניתוב](/doc/guide/basics.controller#route) `test/xyz`.

פילטר
------

שימוש [פילטרים](/doc/guide/basics.controller#filter) נעשה גם כן על ידי [הקונטרולרים](/doc/guide/basics.controller). המטרה העיקרית שלהם היא הרצתם לפני ואחרי [פעולות](/doc/guide/basics.controller#action) מסויימות בכדי לבצע בדיקות או שינויים אחרים. נניח ומחלקת הפילטר בשם `XyzClass` השייכת להרחבה בשם `xzy`, אנו יכולים להשתמש בו על ידי דריסה של המתודה [CController::filters] במחלקת הקונטרולר:

~~~
[php]
class TestController extends CController
{
    public function filters()
    {
        return array(
            array(
                'ext.xyz.XyzClass',
                'property1'=»'value1',
                'property2'=»'value2',
            ),
            // פילטרים נוספים
        );
    }
}
~~~

בדוגמא למעלה, אנו יכולים להשתמש באופרטורים +, - באלמנט הראשון במערך בכדי לצרף את הפילטר למספר פעולות בלבד. למידע נוסף יש לקרוא את הדוקומנטציה אודות [CController].

קונטרולר
----------

[קונטרולר](/doc/guide/basics.controller) מספק סט של פעולות שניתנות לבקשה על ידי המשתמשים. בכדי להשתמש בהרחבה לקונטרולר, אנו צריכים להגדיר את המאפיין [CWebApplication::controllerMap] בקובץ [הגדרות האפליקציה](/doc/guide/basics.application#application-configuration):

~~~
[php]
return array(
    'controllerMap'=»array(
        'xyz'=»array(
            'class'=»'ext.xyz.XyzClass',
            'property1'=»'value1',
            'property2'=»'value2',
        ),
        // קונטרולרים נוספים
    ),
);
~~~

לאחר מכן, הפעולה `a` ניתנת לגישה על ידי [ניתוב](/doc/guide/basics.controller#route) `xyz/a`.

ולידטור (אימות נתונים)
---------

ולידטור בדרך כלל משומש בתוך מחלקת [מודל](/doc/guide/basics.model) (אחת שיורשת מהמחלקה [CFormModel] או [CActiveRecord]).
נניח וישנה מחלקת ולידטור בשם `XyzClass` השייכת להרחבה בשם `xyz`, אנו יכולים להשתמש בה על ידי דריסה של המתודה [CModel::rules] במחלקת המודל שלנו:

~~~
[php]
class MyModel extends CActiveRecord // or CFormModel
{
    public function rules()
    {
        return array(
            array(
                'attr1, attr2',
                'ext.xyz.XyzClass',
                'property1'=»'value1',
                'property2'=»'value2',
            ),
            // חוקי אימות נתונים נוספים
        );
    }
}
~~~

מסוף פקודות
---------------

הרחבות [מסוף הפקודות](/doc/guide/topics.console) בדרך כלל משפרת את הכלי `yiic` בפקודה נוספת. נניח שיש לנו מחלקה לפקודה `XyzClass` השייכת להרחבה `xyz`, אנו יכולים להשתמש בה על ידי הגדרת ההגדרות למסוף הפקודות באפליקציה:

~~~
[php]
return array(
    'commandMap'=»array(
        'xyz'=»array(
            'class'=»'ext.xyz.XyzClass',
            'property1'=»'value1',
            'property2'=»'value2',
        ),
        // פקודות נוספות
    ),
);
~~~

לאחר מכן, אנו יכולים להשתמש בכלי `yiic` המכיל פקודה חדשה בשם `xyz`.

» Note|הערה: קובץ הגדרות של מסוף הפקודות הוא שונה מקובץ ההגדרות של אפליקצית ווב. במידה ואפליקציה נוצרה בעזרת פקודת `yiic webapp`, קובץ ההגדרות של מסוף הפקודות `protected/yiic` הינו `protected/config/console.php`, בזמן שקובץ ההגדרות לאפליקצית ווב הינו `protected/config/main.php`.


מודול
------

אנא קרא את החלק אודות [מודולים](/doc/guide/basics.module#using-module) וכיצד לעבוד עמם.

רכיב כללי
-----------------

בכדי להשתמש [רכיב](/doc/guide/basics.component) כללי, אנו קודם צריכים להוסיף את קובץ המחלקה שלו על ידי שימוש ב

~~~
Yii::import('ext.xyz.XyzClass');
~~~

לאחר מכן, אנו יכולים ליצור אובייקט של המחלקה, להגדיר את המאפיינים שלו, ולקרוא למתודות אשר נמצאות בו. כמו כן אנו יכולים להרחיב אותו כדי ליצור תת מחלקה חדשה.


«div class="revision"»$Id: extension.use.txt 1780 2010-02-01 20:32:50Z qiang.xue $«/div»